Kubernetes 安全 基于云原生安全 4C:云、集群、容器和代碼:
- 云 (或企業(yè)數(shù)據(jù)中心/托管設(shè)施):底層物理基礎(chǔ)設(shè)施是 Kubernetes 安全的基礎(chǔ)。無論集群是建立在自己的數(shù)據(jù)中心還是云提供商上,都必須遵守基本的云提供商(或物理安全)最佳實(shí)踐。
- 集群:保護(hù) Kubernetes 集群涉及可配置組件(例如 Kubernetes API)和集群中所有應(yīng)用程序的安全性。由于大多數(shù)云原生應(yīng)用程序都是圍繞微服務(wù)和 API 設(shè)計(jì)的,因此應(yīng)用程序的安全性取決于構(gòu)成整個(gè)應(yīng)用程序的服務(wù)鏈中最薄弱的環(huán)節(jié)。
- 容器:容器設(shè)計(jì)最佳實(shí)踐包括:從可能的最小代碼庫開始(不包括不必要的庫或函數(shù)),避免向容器中的用戶授予不必要的權(quán)限,并確保在構(gòu)建時(shí)掃描容器以查找漏洞。
- 代碼:代碼為任何 Kubernetes 環(huán)境提供了一個(gè)主要的攻擊面。使用 TLS 握手加密 TCP、不暴露未使用的端口、定期掃描和測試等簡單策略有助于防止生產(chǎn)環(huán)境中出現(xiàn)安全問題。
為什么 Kubernetes 安全性在容器生命周期中很重要?
由于 Kubernetes 集群的分布式、動(dòng)態(tài)特性,Kubernetes 安全性在整個(gè)容器生命周期中都很重要。應(yīng)用程序生命周期的三個(gè)階段中的每個(gè)階段都需要不同的安全方法:構(gòu)建、部署和運(yùn)行時(shí)。Kubernetes 提供了先天的安全優(yōu)勢。例如,應(yīng)用程序容器通常不會(huì)打補(bǔ)丁或更新——相反,容器鏡像完全被新版本替換。如果在新代碼中發(fā)現(xiàn)漏洞,這可以實(shí)現(xiàn)嚴(yán)格的版本控制并允許快速回滾。
但是,由于單個(gè) pod 是瞬態(tài)的,因此不斷變化的運(yùn)行時(shí)環(huán)境可能會(huì)給 IT 安全專業(yè)人員帶來挑戰(zhàn),因?yàn)閼?yīng)用程序和與其他應(yīng)用程序和服務(wù)的 API 鏈接不斷變化。
應(yīng)用程序生命周期中最重要的 Kubernetes 安全漏洞是什么,您如何解決這些漏洞?
Kubernetes 安全工具應(yīng)該:
- 減少時(shí)間以確保代碼沒有妥協(xié)。
- 為代碼提供一定程度的信任提供數(shù)字簽名。
- 不僅在代碼中而且在配置問題中提供可見性和透明度。
- 防止信息進(jìn)入(傳入連接)或傳出(出站連接)到不安全的服務(wù)。
構(gòu)建過程中最常見的 Kubernetes 安全漏洞是什么?
- 來自不受信任的注冊(cè)表的代碼。不受信任的代碼可能包括惡意軟件或后門,它們可能會(huì)無意中授予不良行為者訪問權(quán)限。
- 臃腫的基礎(chǔ)圖像。對(duì)于容器化應(yīng)用程序而言,少即是多,因此開發(fā)人員應(yīng)消除可能受到損害的不必要的包、庫和 shell。
部署期間最常見的 Kubernetes 安全漏洞有哪些?
- 授予不必要的特權(quán)。在可能的情況下,將權(quán)限保持在最低限度,并僅安裝任務(wù)所需的機(jī)密以縮小攻擊面。
- 未能隔離集群中的應(yīng)用程序。命名空間應(yīng)該用于保持資源和團(tuán)隊(duì)彼此分離。
- 集群內(nèi)的橫向運(yùn)動(dòng)。 使用對(duì)網(wǎng)絡(luò)進(jìn)行分段的策略來防止攻擊在集群內(nèi)橫向移動(dòng)。
- 越權(quán)存取。 確保正確配置基于角色的訪問控制 (RBAC) 以限制訪問。
運(yùn)行時(shí)最常見的 Kubernetes 安全漏洞是什么?
- 基礎(chǔ)設(shè)施攻擊。在運(yùn)行時(shí),包括 API 服務(wù)器、etcd 和控制器在內(nèi)的 Kubernetes 基礎(chǔ)設(shè)施元素都呈現(xiàn)出自己的攻擊面。
- 復(fù)雜性。Kubernetes 集群的持續(xù)健康有許多活動(dòng)部分。在定位和修復(fù)攻擊源的同時(shí),必須快速隔離、停止受損容器并用健康容器替換。
什么是高級(jí) Kubernetes 安全檢查表?
最佳實(shí)踐建議包括:從最少的、無發(fā)行版的圖像開始,只添加絕對(duì)必要的內(nèi)容。越小越安全。
- 使用最小的主機(jī)操作系統(tǒng),結(jié)束只讀掛載,并使用 SELinux 選項(xiàng)進(jìn)行更多控制
- 從上到下掃描圖像以查找漏洞,包括操作系統(tǒng)圖像和任何類型的外部圖像。沒有外部可信來源這樣的東西。
- 使用命名空間和 RBAC 以邏輯方式對(duì)集群和用戶進(jìn)行分段。如果不需要,它不應(yīng)該是可見的。
- Kubernetes 網(wǎng)絡(luò) 默認(rèn)允許任意通信,因此 應(yīng)在生產(chǎn)之前實(shí)施網(wǎng)絡(luò)分段。仔細(xì)定義入口和出口策略,以確保正確路由連接。
- 將權(quán)限保持在最低限度,并且永遠(yuǎn)不要以 root 身份運(yùn)行應(yīng)用程序進(jìn)程。使用只讀根文件系統(tǒng)可以防止任何依賴于安裝軟件或修改文件系統(tǒng)的攻擊。
- 將圖像掃描等安全性集成到 CI/CD 管道中。更好的是,運(yùn)行 CIS Benchmark 安全測試。
- 保護(hù)集群本身。配置 RBAC 以限制對(duì) API 服務(wù)器的訪問,并確保所有 etcd 通信都使用 TLS 加密進(jìn)行保護(hù)。同樣,通過為 kubelet 配置 RBAC 來鎖定 kubelet 權(quán)限。
- 利用 Kubernetes 中的內(nèi)置控件,例如配置安全上下文以限制 pod 訪問。
- 主動(dòng)安全應(yīng)包括監(jiān)控進(jìn)程活動(dòng)、服務(wù)之間的通信以及集群外部的通信。